package com.priox.sigar.dto;

import com.priox.sigar.enums.TipoSumatoria;
import com.priox.sigar.util.ListUtil;

import com.priox.sigar.util.SumList;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public class RepBeanTotal {



    private Map agrupacionMap;
    private BigDecimal totalAnno1;
    private BigDecimal totalAnno2;
    private BigDecimal totalAnno3;
    private BigDecimal totalAnno4;
    private BigDecimal totalGeneral;

    private BigDecimal totalRango1;
    private BigDecimal totalRango2;
    private BigDecimal totalRango3;
    private BigDecimal totalRango4;
    private BigDecimal totalRango5;
    private BigDecimal totalRango6;
    private BigDecimal totalRango7;
    private BigDecimal totalRango8;
    private BigDecimal totalRango;

    private BigDecimal tp1;
    private BigDecimal tp2;
    private BigDecimal tp3;
    private BigDecimal tp4;
    private BigDecimal tp5;
    private BigDecimal tp6;
    private BigDecimal tp7;
    private BigDecimal tp8;

    private BigDecimal totalRango1TC;
    private BigDecimal totalRango2TC;
    private BigDecimal totalRango3TC;
    private BigDecimal totalRango4TC;
    private BigDecimal totalRango5TC;
    private BigDecimal totalRango6TC;
    private BigDecimal totalRango7TC;
    private BigDecimal totalRango8TC;
    private BigDecimal totalRangoTC;


    private BigDecimal totalCantidad1;
    private BigDecimal totalCantidad2;
    private BigDecimal totalCantidad3;
    private BigDecimal totalCantidad4;
    private BigDecimal totalCantidad5;
    private BigDecimal totalCantidad6;
    private BigDecimal totalCantidad7;
    private BigDecimal totalCantidad;
    private BigDecimal bimestre1;
    private BigDecimal bimestre2;
    private BigDecimal bimestre3;
    private BigDecimal bimestre4;
    private BigDecimal bimestre5;
    private BigDecimal bimestre6;
    private BigDecimal trimestre1;
    private BigDecimal trimestre2;
    private BigDecimal trimestre3;
    private BigDecimal trimestre4;
    private BigDecimal semestre1;
    private BigDecimal semestre2;

    private BigDecimal cantidadBimestre1;
    private BigDecimal cantidadBimestre2;
    private BigDecimal cantidadBimestre3;
    private BigDecimal cantidadBimestre4;
    private BigDecimal cantidadBimestre5;
    private BigDecimal cantidadBimestre6;
    private BigDecimal cantidadTrimestre1;
    private BigDecimal cantidadTrimestre2;
    private BigDecimal cantidadTrimestre3;
    private BigDecimal cantidadTrimestre4;
    private BigDecimal cantidadSemestre1;
    private BigDecimal cantidadSemestre2;


    public RepBeanTotal(List lista, SumList sumList) {
        sumList.sum(this,lista);
    }

    public RepBeanTotal() {
    }

    public RepBeanTotal(List lista, String[] fields) {
        if (lista == null) {
            return;
        }
        BeanWrapper beanWrapper = new BeanWrapperImpl(this);
        for (int i = 0; i < fields.length; i++) {
            if (i == (fields.length - 1)) {
                beanWrapper.setPropertyValue("totalCantidad", ListUtil.sum(lista, fields[i], null));
            } else {
                beanWrapper.setPropertyValue("totalCantidad" + (i + 1), ListUtil.sum(lista, fields[i], null));
            }
        }
    }

    public RepBeanTotal(List lista, String fieldTotal, String fieldCantidad) {
        if (lista == null) {
            return;
        }
        totalAnno1 = ListUtil.sum(lista, fieldTotal + "1", null);
        totalAnno2 = ListUtil.sum(lista, fieldTotal + "2", null);
        totalAnno3 = ListUtil.sum(lista, fieldTotal + "3", null);
        totalAnno4 = ListUtil.sum(lista, fieldTotal + "4", null);
        totalGeneral = totalAnno1.add(totalAnno2).add(totalAnno3).add(totalAnno4);

        totalCantidad1 = ListUtil.sum(lista, fieldCantidad + "1", null);
        totalCantidad2 = ListUtil.sum(lista, fieldCantidad + "2", null);
        totalCantidad3 = ListUtil.sum(lista, fieldCantidad + "3", null);
        totalCantidad4 = ListUtil.sum(lista, fieldCantidad + "4", null);
        totalCantidad = totalCantidad1.add(totalCantidad2).add(totalCantidad3).add(totalCantidad4);

    }

    public void execute(List<RepAnnosCxPDTO> detalle) {

    }

    public RepBeanTotal(List lista, TipoSumatoria tipo) {
        if (lista == null) {
            return;
        }

        if (TipoSumatoria.GLOBAL.equals(tipo)) {
            calcularTotalGlobal(lista);


        }

        if (TipoSumatoria.ANNO.equals(tipo) || TipoSumatoria.CANTIDAD.equals(tipo)) {
            totalAnno1 = ListUtil.sum(lista, "anno1", null);
            totalAnno2 = ListUtil.sum(lista, "anno2", null);
            totalAnno3 = ListUtil.sum(lista, "anno3", null);
            totalAnno4 = ListUtil.sum(lista, "anno4", null);
            totalGeneral = totalAnno1.add(totalAnno2).add(totalAnno3).add(totalAnno4);
        }

        if (TipoSumatoria.ANNO.equals(tipo) || TipoSumatoria.CANTIDAD.equals(tipo)) {
            totalAnno1 = ListUtil.sum(lista, "anno1", null);
            totalAnno2 = ListUtil.sum(lista, "anno2", null);
            totalAnno3 = ListUtil.sum(lista, "anno3", null);
            totalAnno4 = ListUtil.sum(lista, "anno4", null);
            totalGeneral = totalAnno1.add(totalAnno2).add(totalAnno3).add(totalAnno4);
        }
        if (TipoSumatoria.CANTIDAD.equals(tipo)) {
            totalCantidad1 = ListUtil.sum(lista, "cantidad1", null);
            totalCantidad2 = ListUtil.sum(lista, "cantidad2", null);
            totalCantidad3 = ListUtil.sum(lista, "cantidad3", null);
            totalCantidad4 = ListUtil.sum(lista, "cantidad4", null);
            totalCantidad = totalCantidad1.add(totalCantidad2).add(totalCantidad3).add(totalCantidad4);
        }
        if (TipoSumatoria.RANGO.equals(tipo)) {
            totalRango1 = ListUtil.sum(lista, "rango1", null);
            totalRango2 = ListUtil.sum(lista, "rango2", null);
            totalRango3 = ListUtil.sum(lista, "rango3", null);
            totalRango4 = ListUtil.sum(lista, "rango4", null);
            totalRango5 = ListUtil.sum(lista, "rango5", null);
            totalRango6 = ListUtil.sum(lista, "rango6", null);
            totalRango7 = ListUtil.sum(lista, "rango7", null);
            totalRango8 = ListUtil.sum(lista, "rango8", null);
            totalRango = totalRango1.add(totalRango2)
                    .add(totalRango3).add(totalRango4).add(totalRango5).add(totalRango6)
                    .add(totalRango7).add(totalRango8);


            totalRango1TC = ListUtil.sum(lista, "rango1TC", null);
            totalRango2TC = ListUtil.sum(lista, "rango2TC", null);
            totalRango3TC = ListUtil.sum(lista, "rango3TC", null);
            totalRango4TC = ListUtil.sum(lista, "rango4TC", null);
            totalRango5TC = ListUtil.sum(lista, "rango5TC", null);
            totalRango6TC = ListUtil.sum(lista, "rango6TC", null);
            totalRango7TC = ListUtil.sum(lista, "rango7TC", null);
            totalRango8TC = ListUtil.sum(lista, "rango8TC", null);
            totalRangoTC = totalRango1TC.add(totalRango2TC)
                    .add(totalRango3TC).add(totalRango4TC).add(totalRango5TC).add(totalRango6TC)
                    .add(totalRango7TC).add(totalRango8TC);

        }

        if (TipoSumatoria.DETALLE.equals(tipo)) {
            totalRango1 = ListUtil.sum(lista, "montoMonedaLocal", null);
            totalRango2 = ListUtil.sum(lista, "montoMonedaDolares", null);
            totalRango3 = ListUtil.sum(lista, "montoImporteValorado", null);
        }
    }

    private void calcularTotalGlobal(List lista) {
        totalAnno1 = ListUtil.sum(lista, "anno1", null);
        totalAnno2 = ListUtil.sum(lista, "anno2", null);
        totalAnno3 = ListUtil.sum(lista, "anno3", null);
        totalAnno4 = ListUtil.sum(lista, "anno4", null);
        totalGeneral = totalAnno1.add(totalAnno2).add(totalAnno3).add(totalAnno4);

        totalCantidad1 = ListUtil.sum(lista, "cantidadAnno1", null);
        totalCantidad2 = ListUtil.sum(lista, "cantidadAnno2", null);
        totalCantidad3 = ListUtil.sum(lista, "cantidadAnno3", null);
        totalCantidad4 = ListUtil.sum(lista, "cantidadAnno4", null);
        totalCantidad = totalCantidad1.add(totalCantidad2).add(totalCantidad3).add(totalCantidad4);

        bimestre1 = ListUtil.sum(lista, "bimestre1", null);
        bimestre2 = ListUtil.sum(lista, "bimestre2", null);
        bimestre3 = ListUtil.sum(lista, "bimestre3", null);
        bimestre4 = ListUtil.sum(lista, "bimestre4", null);
        bimestre5 = ListUtil.sum(lista, "bimestre5", null);
        bimestre6 = ListUtil.sum(lista, "bimestre6", null);
        trimestre1 = ListUtil.sum(lista, "trimestre1", null);
        trimestre2 = ListUtil.sum(lista, "trimestre2", null);
        trimestre3 = ListUtil.sum(lista, "trimestre3", null);
        semestre1 = ListUtil.sum(lista, "semestre1", null);
        semestre2 = ListUtil.sum(lista, "semestre2", null);

        cantidadBimestre1 = ListUtil.sum(lista, "cantidadBimestre1", null);
        cantidadBimestre2 = ListUtil.sum(lista, "cantidadBimestre2", null);
        cantidadBimestre3 = ListUtil.sum(lista, "cantidadBimestre3", null);
        cantidadBimestre4 = ListUtil.sum(lista, "cantidadBimestre4", null);
        cantidadBimestre5 = ListUtil.sum(lista, "cantidadBimestre5", null);
        cantidadBimestre6 = ListUtil.sum(lista, "cantidadBimestre6", null);
        cantidadTrimestre1 = ListUtil.sum(lista, "cantidadTrimestre1", null);
        cantidadTrimestre2 = ListUtil.sum(lista, "cantidadTrimestre2", null);
        cantidadTrimestre3 = ListUtil.sum(lista, "cantidadTrimestre3", null);
        cantidadSemestre1 = ListUtil.sum(lista, "cantidadSemestre1", null);
        cantidadSemestre2 = ListUtil.sum(lista, "cantidadSemestre2", null);

        totalCantidad2 = ListUtil.sum(lista, "cantidadAnno2", null);
        totalCantidad3 = ListUtil.sum(lista, "cantidadAnno3", null);
        totalCantidad4 = ListUtil.sum(lista, "cantidadAnno4", null);
        totalCantidad = totalCantidad1.add(totalCantidad2).add(totalCantidad3).add(totalCantidad4);

    }


    public BigDecimal getTotalAnno1() {
        return totalAnno1;
    }

    public void setTotalAnno1(BigDecimal totalAnno1) {
        this.totalAnno1 = totalAnno1;
    }

    public BigDecimal getTotalAnno2() {
        return totalAnno2;
    }

    public void setTotalAnno2(BigDecimal totalAnno2) {
        this.totalAnno2 = totalAnno2;
    }

    public BigDecimal getTotalAnno3() {
        return totalAnno3;
    }

    public void setTotalAnno3(BigDecimal totalAnno3) {
        this.totalAnno3 = totalAnno3;
    }

    public BigDecimal getTotalAnno4() {
        return totalAnno4;
    }

    public void setTotalAnno4(BigDecimal totalAnno4) {
        this.totalAnno4 = totalAnno4;
    }

    public BigDecimal getTotalCantidad1() {
        return totalCantidad1;
    }

    public void setTotalCantidad1(BigDecimal totalCantidad1) {
        this.totalCantidad1 = totalCantidad1;
    }

    public BigDecimal getTotalCantidad2() {
        return totalCantidad2;
    }

    public void setTotalCantidad2(BigDecimal totalCantidad2) {
        this.totalCantidad2 = totalCantidad2;
    }

    public BigDecimal getTotalCantidad3() {
        return totalCantidad3;
    }

    public void setTotalCantidad3(BigDecimal totalCantidad3) {
        this.totalCantidad3 = totalCantidad3;
    }

    public BigDecimal getTotalCantidad4() {
        return totalCantidad4;
    }

    public void setTotalCantidad4(BigDecimal totalCantidad4) {
        this.totalCantidad4 = totalCantidad4;
    }

    public BigDecimal getTotalGeneral() {
        return totalGeneral;
    }

    public void setTotalGeneral(BigDecimal totalGeneral) {
        this.totalGeneral = totalGeneral;
    }

    public BigDecimal getTotalCantidad() {
        return totalCantidad;
    }

    public void setTotalCantidad(BigDecimal totalCantidad) {
        this.totalCantidad = totalCantidad;
    }

    public BigDecimal getTotalRango1() {
        return totalRango1;
    }

    public void setTotalRango1(BigDecimal totalRango1) {
        this.totalRango1 = totalRango1;
    }

    public BigDecimal getTotalRango2() {
        return totalRango2;
    }

    public void setTotalRango2(BigDecimal totalRango2) {
        this.totalRango2 = totalRango2;
    }

    public BigDecimal getTotalRango3() {
        return totalRango3;
    }

    public void setTotalRango3(BigDecimal totalRango3) {
        this.totalRango3 = totalRango3;
    }

    public BigDecimal getTotalRango4() {
        return totalRango4;
    }

    public void setTotalRango4(BigDecimal totalRango4) {
        this.totalRango4 = totalRango4;
    }

    public BigDecimal getTotalRango5() {
        return totalRango5;
    }

    public void setTotalRango5(BigDecimal totalRango5) {
        this.totalRango5 = totalRango5;
    }

    public BigDecimal getTotalRango6() {
        return totalRango6;
    }

    public void setTotalRango6(BigDecimal totalRango6) {
        this.totalRango6 = totalRango6;
    }

    public BigDecimal getTotalRango() {
        return totalRango;
    }

    public void setTotalRango(BigDecimal totalRango) {
        this.totalRango = totalRango;
    }

    public BigDecimal getTotalRango7() {
        return totalRango7;
    }

    public void setTotalRango7(BigDecimal totalRango7) {
        this.totalRango7 = totalRango7;
    }

    public BigDecimal getTotalRango8() {
        return totalRango8;

    }

    public void setTotalRango8(BigDecimal totalRango8) {
        this.totalRango8 = totalRango8;
    }

    public BigDecimal getTotalRango1TC() {
        return totalRango1TC;
    }

    public void setTotalRango1TC(BigDecimal totalRango1TC) {
        this.totalRango1TC = totalRango1TC;
    }

    public BigDecimal getTotalRango2TC() {
        return totalRango2TC;
    }

    public void setTotalRango2TC(BigDecimal totalRango2TC) {
        this.totalRango2TC = totalRango2TC;
    }

    public BigDecimal getTotalRango3TC() {
        return totalRango3TC;
    }

    public void setTotalRango3TC(BigDecimal totalRango3TC) {
        this.totalRango3TC = totalRango3TC;
    }

    public BigDecimal getTotalRango4TC() {
        return totalRango4TC;
    }

    public void setTotalRango4TC(BigDecimal totalRango4TC) {
        this.totalRango4TC = totalRango4TC;
    }

    public BigDecimal getTotalRango5TC() {
        return totalRango5TC;
    }

    public void setTotalRango5TC(BigDecimal totalRango5TC) {
        this.totalRango5TC = totalRango5TC;
    }

    public BigDecimal getTotalRango6TC() {
        return totalRango6TC;
    }

    public void setTotalRango6TC(BigDecimal totalRango6TC) {
        this.totalRango6TC = totalRango6TC;
    }

    public BigDecimal getTotalRango7TC() {
        return totalRango7TC;
    }

    public void setTotalRango7TC(BigDecimal totalRango7TC) {
        this.totalRango7TC = totalRango7TC;
    }

    public BigDecimal getTotalRango8TC() {
        return totalRango8TC;
    }

    public void setTotalRango8TC(BigDecimal totalRango8TC) {
        this.totalRango8TC = totalRango8TC;
    }

    public BigDecimal getTotalRangoTC() {
        return totalRangoTC;
    }

    public void setTotalRangoTC(BigDecimal totalRangoTC) {
        this.totalRangoTC = totalRangoTC;
    }

    public BigDecimal getTp1() {
        return tp1;
    }

    public void setTp1(BigDecimal tp1) {
        this.tp1 = tp1;
    }

    public BigDecimal getTp2() {
        return tp2;
    }

    public void setTp2(BigDecimal tp2) {
        this.tp2 = tp2;
    }

    public BigDecimal getTp3() {
        return tp3;
    }

    public void setTp3(BigDecimal tp3) {
        this.tp3 = tp3;
    }

    public BigDecimal getTp4() {
        return tp4;
    }

    public void setTp4(BigDecimal tp4) {
        this.tp4 = tp4;
    }

    public BigDecimal getTp5() {
        return tp5;
    }

    public void setTp5(BigDecimal tp5) {
        this.tp5 = tp5;
    }

    public BigDecimal getTp6() {
        return tp6;
    }

    public void setTp6(BigDecimal tp6) {
        this.tp6 = tp6;
    }

    public BigDecimal getTp7() {
        return tp7;
    }

    public void setTp7(BigDecimal tp7) {
        this.tp7 = tp7;
    }

    public BigDecimal getTp8() {
        return tp8;
    }

    public void setTp8(BigDecimal tp8) {
        this.tp8 = tp8;
    }

    public BigDecimal getTotalCantidad5() {
        return totalCantidad5;
    }

    public void setTotalCantidad5(BigDecimal totalCantidad5) {
        this.totalCantidad5 = totalCantidad5;
    }

    public BigDecimal getTotalCantidad6() {
        return totalCantidad6;
    }

    public void setTotalCantidad6(BigDecimal totalCantidad6) {
        this.totalCantidad6 = totalCantidad6;
    }

    public BigDecimal getTotalCantidad7() {
        return totalCantidad7;
    }

    public void setTotalCantidad7(BigDecimal totalCantidad7) {
        this.totalCantidad7 = totalCantidad7;
    }

    public BigDecimal getBimestre1() {
        return bimestre1;
    }

    public void setBimestre1(BigDecimal bimestre1) {
        this.bimestre1 = bimestre1;
    }

    public BigDecimal getBimestre2() {
        return bimestre2;
    }

    public void setBimestre2(BigDecimal bimestre2) {
        this.bimestre2 = bimestre2;
    }

    public BigDecimal getBimestre3() {
        return bimestre3;
    }

    public void setBimestre3(BigDecimal bimestre3) {
        this.bimestre3 = bimestre3;
    }

    public BigDecimal getBimestre4() {
        return bimestre4;
    }

    public void setBimestre4(BigDecimal bimestre4) {
        this.bimestre4 = bimestre4;
    }

    public BigDecimal getBimestre5() {
        return bimestre5;
    }

    public void setBimestre5(BigDecimal bimestre5) {
        this.bimestre5 = bimestre5;
    }

    public BigDecimal getBimestre6() {
        return bimestre6;
    }

    public void setBimestre6(BigDecimal bimestre6) {
        this.bimestre6 = bimestre6;
    }

    public BigDecimal getTrimestre1() {
        return trimestre1;
    }

    public void setTrimestre1(BigDecimal trimestre1) {
        this.trimestre1 = trimestre1;
    }

    public BigDecimal getTrimestre2() {
        return trimestre2;
    }

    public void setTrimestre2(BigDecimal trimestre2) {
        this.trimestre2 = trimestre2;
    }

    public BigDecimal getTrimestre3() {
        return trimestre3;
    }

    public void setTrimestre3(BigDecimal trimestre3) {
        this.trimestre3 = trimestre3;
    }

    public BigDecimal getTrimestre4() {
        return trimestre4;
    }

    public void setTrimestre4(BigDecimal trimestre4) {
        this.trimestre4 = trimestre4;
    }

    public BigDecimal getSemestre1() {
        return semestre1;
    }

    public void setSemestre1(BigDecimal semestre1) {
        this.semestre1 = semestre1;
    }

    public BigDecimal getSemestre2() {
        return semestre2;
    }

    public void setSemestre2(BigDecimal semestre2) {
        this.semestre2 = semestre2;
    }

    public BigDecimal getCantidadBimestre1() {
        return cantidadBimestre1;
    }

    public void setCantidadBimestre1(BigDecimal cantidadBimestre1) {
        this.cantidadBimestre1 = cantidadBimestre1;
    }

    public BigDecimal getCantidadBimestre2() {
        return cantidadBimestre2;
    }

    public void setCantidadBimestre2(BigDecimal cantidadBimestre2) {
        this.cantidadBimestre2 = cantidadBimestre2;
    }

    public BigDecimal getCantidadBimestre3() {
        return cantidadBimestre3;
    }

    public void setCantidadBimestre3(BigDecimal cantidadBimestre3) {
        this.cantidadBimestre3 = cantidadBimestre3;
    }

    public BigDecimal getCantidadBimestre4() {
        return cantidadBimestre4;
    }

    public void setCantidadBimestre4(BigDecimal cantidadBimestre4) {
        this.cantidadBimestre4 = cantidadBimestre4;
    }

    public BigDecimal getCantidadBimestre5() {
        return cantidadBimestre5;
    }

    public void setCantidadBimestre5(BigDecimal cantidadBimestre5) {
        this.cantidadBimestre5 = cantidadBimestre5;
    }

    public BigDecimal getCantidadBimestre6() {
        return cantidadBimestre6;
    }

    public void setCantidadBimestre6(BigDecimal cantidadBimestre6) {
        this.cantidadBimestre6 = cantidadBimestre6;
    }

    public BigDecimal getCantidadTrimestre1() {
        return cantidadTrimestre1;
    }

    public void setCantidadTrimestre1(BigDecimal cantidadTrimestre1) {
        this.cantidadTrimestre1 = cantidadTrimestre1;
    }

    public BigDecimal getCantidadTrimestre2() {
        return cantidadTrimestre2;
    }

    public void setCantidadTrimestre2(BigDecimal cantidadTrimestre2) {
        this.cantidadTrimestre2 = cantidadTrimestre2;
    }

    public BigDecimal getCantidadTrimestre3() {
        return cantidadTrimestre3;
    }

    public void setCantidadTrimestre3(BigDecimal cantidadTrimestre3) {
        this.cantidadTrimestre3 = cantidadTrimestre3;
    }

    public BigDecimal getCantidadTrimestre4() {
        return cantidadTrimestre4;
    }

    public void setCantidadTrimestre4(BigDecimal cantidadTrimestre4) {
        this.cantidadTrimestre4 = cantidadTrimestre4;
    }

    public BigDecimal getCantidadSemestre1() {
        return cantidadSemestre1;
    }

    public void setCantidadSemestre1(BigDecimal cantidadSemestre1) {
        this.cantidadSemestre1 = cantidadSemestre1;
    }

    public BigDecimal getCantidadSemestre2() {
        return cantidadSemestre2;
    }

    public void setCantidadSemestre2(BigDecimal cantidadSemestre2) {
        this.cantidadSemestre2 = cantidadSemestre2;
    }

    public Map getAgrupacionMap() {
        return agrupacionMap;
    }

    public void setAgrupacionMap(Map agrupacionMap) {
        this.agrupacionMap = agrupacionMap;
    }
}
